package com.itheima.mybatisplusdemo.domain;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


/****
 * 1、字段和属性名对不上: 实体类属性上 @TableField(value = "指定匹配的字段名")
 * 2、表名和实体类名字对不上: 实体类上@TableName(value = "匹配的表名")
 * 3、查看权限: 实体类属性上@TableField(select = false)//不参与查询,默认是true
 * 4、实体类中有一个属性在表中不存在对应字段: 实体类属性上@TableField(exist = false)
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
//配置子表和实体类映射关系
//value 指定数据库表名
@TableName(value = "tb_user")
public class User {
    /**
     * @TableId: 当前注解所在属性对应数据库主键列
     * value = "id" 指定数据库主键列名
     * type:
     *  AUTO: 主键自增
     */
    //TableId(value = "id", type = IdType.AUTO)//使用全局配置
    private Long id;
    private String name;
    //表字段和属性映射关系的注解
    //value指定数据库表的字段名
    //select =false , 表示不查询该属性对应的字段的数据
    //@TableField(value = "pwd", select = false)
    @TableField(select = false)//不参与查询
    private String password;
    private Long age;
    private String tel;

    //标记用户是否在线
    //标识在数据库中没有
    @TableField(exist = false)//默认为true。此属性无法与value合并使用。
    private Integer online;

    //@TableLogic(value = "0", delval = "1")//不需要结合配置文件中的属性,value属性是为删除状态,delval是删除状态方式1
    @TableLogic//配合配置文件中的属性使用,方式2
    private Integer del;

    //版本号控制(实现乐观锁)
    @Version
    private Integer version;
}
